#!/bin/bash

# 成达大屏监控系统重启脚本
# 作者: AI Assistant
# 日期: 2025-09-19

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 项目配置
PROJECT_NAME="成达大屏监控系统"
PROJECT_DIR="/Users/shafei/Desktop/AI/demo-成达大屏"
MAVEN_PATH="/Users/shafei/Desktop/dsz/apache-maven-3.6.1/bin/mvn"
APP_PORT=8080
APP_URL="http://localhost:${APP_PORT}/api/"

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查项目目录是否存在
check_project_dir() {
    if [ ! -d "$PROJECT_DIR" ]; then
        log_error "项目目录不存在: $PROJECT_DIR"
        exit 1
    fi
}

# 检查Maven是否存在
check_maven() {
    if [ ! -f "$MAVEN_PATH" ]; then
        log_error "Maven不存在: $MAVEN_PATH"
        exit 1
    fi
}

# 停止应用
stop_app() {
    log_info "正在停止 $PROJECT_NAME..."
    
    # 查找Java进程
    JAVA_PID=$(ps aux | grep "com.chengda.dashboard.DashboardApplication" | grep -v grep | awk '{print $2}')
    
    if [ -n "$JAVA_PID" ]; then
        log_info "找到应用进程 PID: $JAVA_PID"
        kill -9 $JAVA_PID
        sleep 2
        
        # 验证进程是否已停止
        if ps -p $JAVA_PID > /dev/null 2>&1; then
            log_warning "进程仍在运行，强制终止..."
            kill -9 $JAVA_PID
            sleep 1
        fi
        
        log_success "应用已停止"
    else
        log_warning "未找到运行中的应用进程"
    fi
    
    # 检查端口是否被占用
    if lsof -i :$APP_PORT > /dev/null 2>&1; then
        log_warning "端口 $APP_PORT 仍被占用，尝试释放..."
        lsof -ti :$APP_PORT | xargs kill -9 2>/dev/null
        sleep 1
    fi
}

# 启动应用
start_app() {
    log_info "正在启动 $PROJECT_NAME..."
    
    # 切换到项目目录
    cd "$PROJECT_DIR"
    
    # 编译项目
    log_info "编译项目..."
    $MAVEN_PATH clean compile -q
    
    if [ $? -ne 0 ]; then
        log_error "项目编译失败"
        exit 1
    fi
    
    # 启动应用
    log_info "启动SpringBoot应用..."
    nohup $MAVEN_PATH spring-boot:run > logs/app.log 2>&1 &
    
    # 等待应用启动
    log_info "等待应用启动..."
    sleep 10
    
    # 检查应用是否启动成功
    if curl -s -f "$APP_URL" > /dev/null 2>&1; then
        log_success "应用启动成功！"
        log_info "访问地址: $APP_URL"
        log_info "日志文件: $PROJECT_DIR/logs/app.log"
    else
        log_error "应用启动失败，请检查日志文件"
        log_info "日志文件: $PROJECT_DIR/logs/app.log"
        exit 1
    fi
}

# 检查应用状态
check_status() {
    log_info "检查应用状态..."
    
    # 检查进程
    JAVA_PID=$(ps aux | grep "com.chengda.dashboard.DashboardApplication" | grep -v grep | awk '{print $2}')
    
    if [ -n "$JAVA_PID" ]; then
        log_success "应用正在运行 (PID: $JAVA_PID)"
    else
        log_warning "应用未运行"
        return 1
    fi
    
    # 检查端口
    if lsof -i :$APP_PORT > /dev/null 2>&1; then
        log_success "端口 $APP_PORT 正在监听"
    else
        log_warning "端口 $APP_PORT 未监听"
        return 1
    fi
    
    # 检查HTTP响应
    if curl -s -f "$APP_URL" > /dev/null 2>&1; then
        log_success "HTTP服务正常"
    else
        log_warning "HTTP服务异常"
        return 1
    fi
    
    return 0
}

# 显示帮助信息
show_help() {
    echo "成达大屏监控系统管理脚本"
    echo ""
    echo "用法: $0 [选项]"
    echo ""
    echo "选项:"
    echo "  start     启动应用"
    echo "  stop      停止应用"
    echo "  restart   重启应用"
    echo "  status    检查应用状态"
    echo "  logs      查看应用日志"
    echo "  help      显示帮助信息"
    echo ""
    echo "示例:"
    echo "  $0 restart    # 重启应用"
    echo "  $0 status     # 检查状态"
    echo "  $0 logs       # 查看日志"
}

# 查看日志
view_logs() {
    if [ -f "$PROJECT_DIR/logs/app.log" ]; then
        log_info "显示应用日志 (最后50行):"
        echo "----------------------------------------"
        tail -50 "$PROJECT_DIR/logs/app.log"
        echo "----------------------------------------"
        log_info "完整日志文件: $PROJECT_DIR/logs/app.log"
    else
        log_warning "日志文件不存在: $PROJECT_DIR/logs/app.log"
    fi
}

# 创建日志目录
create_log_dir() {
    if [ ! -d "$PROJECT_DIR/logs" ]; then
        mkdir -p "$PROJECT_DIR/logs"
        log_info "创建日志目录: $PROJECT_DIR/logs"
    fi
}

# 主函数
main() {
    echo "=========================================="
    echo "     $PROJECT_NAME 管理脚本"
    echo "=========================================="
    
    # 检查环境
    check_project_dir
    check_maven
    create_log_dir
    
    case "${1:-restart}" in
        "start")
            stop_app
            start_app
            ;;
        "stop")
            stop_app
            ;;
        "restart")
            stop_app
            start_app
            ;;
        "status")
            check_status
            ;;
        "logs")
            view_logs
            ;;
        "help"|"-h"|"--help")
            show_help
            ;;
        *)
            log_error "未知选项: $1"
            show_help
            exit 1
            ;;
    esac
}

# 执行主函数
main "$@"
